const express = require('express');
const router = express.Router();
const { userModel } = require('../model/model');
const { v4: uuidv4 } = require('uuid');
const crypto = require('crypto');

// 模拟支付系统配置
const PAYMENT_CONFIG = {
  sandbox: true,
  merchantId: 'test_merchant_id',
  privateKey: 'test_private_key'
};

// 模拟订单存储
const orders = {};

// 模拟支付状态更新（实际应用中这部分逻辑应该由支付系统回调触发）
function updatePaymentStatus(orderId, status) {
  if (orders[orderId]) {
    orders[orderId].status = status;
    return true;
  }
  return false;
}

// 创建订单
router.post('/create-order', async (req, res) => {
  try {
    const { userId, productType } = req.body;

    if (!userId || !productType) {
      return res.status(400).json({ message: '用户ID和产品类型不能为空' });
    }

    // 检查用户是否存在
    const user = await userModel.findById(userId);
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }

    // 设置产品价格
    let amount = 0;
    let description = '';

    if (productType === 'monthly_vip') {
      amount = 25; // 月会员25元
      description = '月会员订阅';
    } else if (productType === 'quarterly_vip') {
      amount = 45; // 季会员45元
      description = '季会员订阅';
    } else if (productType === 'vote_ticket') {
      amount = 5; // 投票券5元一张
      description = '投票券购买';
    } else {
      return res.status(400).json({ message: '无效的产品类型' });
    }

    // 创建订单
    const orderId = uuidv4();
    const timestamp = Date.now();
    const signature = crypto
      .createHmac('sha256', PAYMENT_CONFIG.privateKey)
      .update(`${orderId}${timestamp}${amount}`)
      .digest('hex');

    // 保存订单到内存存储
    const order = {
      orderId,
      userId,
      amount,
      description,
      status: 'pending',
      createdAt: new Date(),
      productType
    };
    orders[orderId] = order;

    // 在沙箱环境下，返回模拟支付页面链接
    const paymentUrl = `http://localhost:4002/payment-simulator.html?orderId=${orderId}&signature=${signature}&timestamp=${timestamp}`;

    res.json({
      success: true,
      orderId,
      amount,
      paymentUrl
    });
  } catch (error) {
    console.error('创建订单失败:', error);
    res.status(500).json({ message: '创建订单失败', error: error.message });
  }
});

// 检查支付状态
router.get('/check-payment', async (req, res) => {
  try {
    const { orderId } = req.query;

    if (!orderId) {
      return res.status(400).json({ message: '订单ID不能为空' });
    }

    // 查找订单
    const order = orders[orderId];
    if (!order) {
      return res.status(404).json({ message: '订单不存在' });
    }

    res.json({
      success: true,
      orderId: order.orderId,
      status: order.status,
      amount: order.amount,
      productType: order.productType
    });
  } catch (error) {
    console.error('检查支付状态失败:', error);
    res.status(500).json({ message: '检查支付状态失败', error: error.message });
  }
});

// 支付回调
router.get('/pay-callback', async (req, res) => {
  try {
    const { orderId, signature, timestamp } = req.query;

    // 验证签名
    // 在实际应用中，应该验证签名是否有效

    // 查找订单
    const order = orders[orderId];
    if (!order) {
      return res.status(404).send('<h1>订单不存在</h1>');
    }

    // 更新订单状态为已支付
    updatePaymentStatus(orderId, 'paid');

    // 更新用户会员信息
    const user = await userModel.findById(order.userId);
    if (user) {
      if (order.productType === 'monthly_vip') {
        user.vipLevel = 1;
        user.vipExpires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000); // 30天后过期
      } else if (order.productType === 'quarterly_vip') {
        user.vipLevel = 2;
        user.vipExpires = new Date(Date.now() + 90 * 24 * 60 * 60 * 1000); // 90天后过期
      } else if (order.productType === 'vote_ticket') {
        user.voteTickets = (user.voteTickets || 0) + 1;
      }

      await user.save();
    }

    res.send('<h1>支付成功！请返回应用</h1>');
  } catch (error) {
    console.error('支付回调处理失败:', error);
    res.status(500).send('支付处理失败');
  }
});

// 获取用户会员信息
router.get('/user-info', async (req, res) => {
  try {
    const { userId } = req.query;
    
    if (!userId) {
      return res.status(400).json({ message: '用户ID不能为空' });
    }
    
    const user = await userModel.findById(userId);
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }
    
    const isVip = user.vipLevel > 0 && user.vipExpires && user.vipExpires > new Date();
    
    res.json({
      isVip,
      vipLevel: user.vipLevel,
      vipExpires: user.vipExpires,
      dailyConfessionCount: user.dailyConfessionCount,
      voteTickets: user.voteTickets
    });
  } catch (error) {
    console.error('获取会员信息失败:', error);
    res.status(500).json({ message: '获取会员信息失败', error: error.message });
  }
});

module.exports = router;